1. Field of the Invention
The present invention generally relates to issuing I/O requests directed to a shared storage resource. More particularly, the present invention relates to a method, system and computer program product for optimizing issuance of I/O (Input and Output) requests from a plurality of host devices to a shared storage resource (e.g., a LUN (Logical Unit Number), which is a logical storage unit defined by a protocol) by reducing communication overheads between host devices.
2. Description of the Prior Art
A concern occurs when managing a maximum number of concurrent I/O requests issued to a LUN (i.e., a logical storage unit defined by a protocol) by one engine (i.e., a host device such as a server) of a virtualization appliance (e.g., IBM® SAN Volume Controller) that is operating as a cluster: if the total number of concurrent requests made by all the engines in the cluster becomes too large, then the LUN will respond with a queue fill condition (i.e., a queue in the LUN is full) to some of these requests. For performance reasons, it is desirable to avoid large numbers of occurrences of such queue full conditions. To avoid frequent occurrence of queue full condition in the LUN, the current existing technique is to enforce a maximum number of concurrent service (e.g., I/O service) requests, which is the same for each engine and each LUN. This approach has two very important drawbacks:                1. The current technique does not provide for the possibility that a LUN may be capable of handling a larger volume of concurrent I/O than the set maximum; and        2. The current technique does not provide for variations in demand among the engines. If an engine (i.e., a host device or server) is the only one currently producing service requests to a specific LUN, the engine should be able to increase its currently available maximum number of concurrent service requests to a higher value        
The present invention addresses drawbacks of the currently existing technique, by providing a dynamic, distributed process for setting a different limit for each shared storage resource (e.g., LUN) and each engine.